home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: MegaDisc / MegaDisc 28 (1992-05)(MegaDisc Digital Publishing)(AU)(Disk 2 of 2).zip / MegaDisc 28 (1992-05)(MegaDisc Digital Publishing)(AU)(Disk 2 of 2).adf / Programming / ILBM_Prog / ILBM_Code / Picture.c < prev    next >
C/C++ Source or Header  |  1992-05-26  |  7KB  |  169 lines

  1. /*************************************************************************
  2.  
  3.    Picture.c
  4.    28/02/1992
  5.    
  6.    Example 'C' code for use with MEGADISC article on using IFF_ILBM files.
  7.    
  8. *************************************************************************/
  9.  
  10. #include <exec/types.h>
  11. #include <graphics/gfxmacros.h>
  12. #include <intuition/intuition.h>
  13. #include "ILBM.h"
  14. #include "Picture.h"
  15.                               /* functions in ILBM.o that we use.          */
  16. extern   struct   Window   *OpenWindow();
  17. extern   struct   Screen   *OpenScreen();
  18. extern   PLANEPTR AllocRaster();
  19.  
  20. extern   BOOL  ReadFile();
  21. extern   VOID  FadeDown();    /* Fade up viewport from black to CMAP1      */
  22. extern   VOID  FadeUp();      /* Fade viewport from CMAP1 to black.        */
  23. extern   VOID  BlackoutVP();  /* make CMAP2 black and load into viewport   */
  24. extern   VOID  PutCMAP();     /* put CMAP1 into viewport.                  */
  25.  
  26. BOOL  SetUp();             /* Picture.c functions                      */
  27.  
  28. VOID  DoPicture();
  29. VOID  Cleanup();
  30.  
  31. struct   IntuitionBase *IntuitionBase;    /* pointer to IntuitionBase   */
  32. struct   GfxBase  *GfxBase;               /* pointer to Graphics Base   */
  33. struct   Screen   *screen;                /* pointer to our screen      */
  34. struct   Window   *window;                /* pointer to window struct   */
  35. struct   BitMap   bm;                     /* BitMap for my use          */
  36. struct   RastPort osrp;                   /* off screen RastPort        */
  37. struct   RastPort *rpp;                   /* pointer to RastPort        */
  38. struct   RastPort *rp;                    /* pointer to windows RastPort*/
  39. struct   ViewPort *vp;
  40.  
  41. struct NewScreen new_screen=
  42. {
  43.   0,            /* LeftEdge  Should always be 0.                        */
  44.   0,            /* TopEdge   Top of the display.                        */
  45.   WIDTH,        /* Width     We are using a low-resolution screen.      */
  46.   HEIGHT,       /* Height    Non-Interlaced NTSC (American) display.    */
  47.   DEPTH,        /* Depth     8 colours. Defined in Picture.h            */
  48.   0,            /* DetailPen Text should be drawn with colour reg. 0    */
  49.   1,            /* BlockPen  Blocks should be drawn with colour reg. 1  */
  50.   HIRES,        /* ViewModes No special modes. (Low-res, Non-Interlaced) */
  51.   CUSTOMSCREEN | SCREENBEHIND,
  52.                 /* Type      Your own customized screen.                */
  53.   NULL,         /* Font      Default font.                              */
  54.   NULL,         /* Title     The screen' title.                         */
  55.   NULL,         /* Gadget    Must for the moment be NULL.               */
  56.   NULL          /* BitMap    No special CustomBitMap.                   */
  57. };
  58.  
  59. struct NewWindow new_window=
  60. {
  61.   0,             /* LeftEdge    x position of the window.               */
  62.   0,             /* TopEdge     y positio of the window.                */
  63.   WIDTH,         /* Width       150 pixels wide.                        */
  64.   HEIGHT,        /* Height      100 lines high.                         */
  65.   0,             /* DetailPen   Text should be drawn with colour reg. 0 */
  66.   1,             /* BlockPen    Blocks should be drawn with colour reg. 1 */
  67.   MOUSEBUTTONS,  /* IDCMPFlags  Tell me if a mouse button is pressed.   */
  68.   SMART_REFRESH | BORDERLESS, 
  69.                  /* Flags       Intuition should refresh the window.    */
  70.   NULL,          /* FirstGadget No Custom Gadgets.                      */
  71.   NULL,          /* CheckMark   Use Intuition's default CheckMark (v).  */
  72.   NULL,          /* Title       Title of the window.                    */
  73.   NULL,          /* Screen      Connected to the Workbench Screen.      */
  74.   NULL,          /* BitMap      No Custom BitMap.                       */
  75.   0,             /* MinWidth    We do not need to care about these      */
  76.   0,             /* MinHeight   since we havent supplied the window with */
  77.   0,             /* MaxWidth    a Sizing Gadget.                        */
  78.   0,             /* MaxHeight                                           */
  79.   CUSTOMSCREEN   /* Type                                                */
  80. };
  81.  
  82. main()
  83. {
  84.    if(SetUp()) DoPicture();   /* this is the program  */
  85.    
  86.    Cleanup();
  87. }
  88.  
  89. BOOL  SetUp()
  90. {
  91.    printf("Please Wait...\nSetting up and loading screen.\n");
  92.    
  93.    IntuitionBase = (struct IntuitionBase *)
  94.       OpenLibrary( "intuition.library", 0 );
  95.    if( IntuitionBase == NULL )
  96.    {
  97.       printf("Intuition failed to open.\n");
  98.       return(FALSE);
  99.    }
  100.    
  101.    GfxBase = (struct Gfxbase *) OpenLibrary("graphics.library",0);
  102.    if(GfxBase == NULL)
  103.    {
  104.       printf("Graphics failed to open.\n");
  105.       return(FALSE);
  106.    }
  107.  
  108.    screen = OpenScreen( &new_screen );
  109.    if(screen == NULL)
  110.    {
  111.       printf("Screen failed to open.\n");
  112.       return(FALSE);
  113.    }
  114.    
  115.    new_window.Screen = screen;   /* link the new_window structure to the   */
  116.    vp = &screen->ViewPort;       /* newly opened screen.                   */
  117.  
  118.    /* We will now try to open the window: */
  119.    window = OpenWindow( &new_window );
  120.    if(window == NULL)
  121.    {
  122.       printf("No window!\n");
  123.       return(FALSE);  
  124.    }
  125.    rp = window->RPort;
  126.    
  127.    return(TRUE);  /* if everything opened and allocated correctly */
  128. }
  129.  
  130. VOID  DoPicture()
  131. {
  132.    int   success;
  133.    
  134.    if(MakeBitMap(&bm, DEPTH, WIDTH, HEIGHT))
  135.    {
  136.       InitRastPort(&osrp); /* we have to set up a RastPort and link     */
  137.       osrp.BitMap = &bm;   /* bit maps so that we have work areas.      */
  138.       rpp = &osrp;
  139.    
  140.       success = ReadFile("file.pic", &bm, vp, OK_USE_CMAP);  /* Read the file     */
  141.       if(success)
  142.       {
  143.          BlackoutVP(vp);                              /* black the screen  */
  144.          ClipBlit(rpp, 0, 0, rp, 0, 0, 640, 256, 0xc0);  /* move the image */
  145.          ScreenToFront(screen);        /* move screen to front for display */
  146.          FadeUp(vp);                   /* fade the colours in.             */
  147.          Wait(1L<<window->UserPort->mp_SigBit); /* wait for mouse button   */
  148.                                              /* press which is the only */
  149.                                              /* event in windows IDCMP  */
  150.          FadeDown(vp);                       /* fade the colours to black  */
  151.       }
  152.       else
  153.       {
  154.          printf("Could not open picture file.\n");
  155.       }
  156.    }
  157. }
  158.  
  159. VOID  Cleanup()   /* intelligently close any resources opened by program */
  160. {
  161.    printf("Cleaning up.\n");
  162.    if(window)        CloseWindow ( window );
  163.    if(screen)        CloseScreen ( screen );
  164.    FreeBitMap(&bm);
  165.    if(GfxBase)       CloseLibrary( GfxBase);
  166.    if(IntuitionBase) CloseLibrary( IntuitionBase );
  167.    Delay(50 * 2); /* In case of errors, I need to read the reason */   
  168. }
  169.